Lab 05a - Usługi w Linuksie
Usługi w Linuksie
Wprowadzenie do zarządzania usługami w systemie Linux
W tle Linuksa stale działa wiele usług, takich jak usługi sieciowe i systemowe. Usługi działające w systemie Linux są również znane jako daemony.
systemd jest pakietem narzędzi wykorzystywanych przez
większość współczesnych dystrybucji Linuksa. Wszystkie zadania systemowe
mogą być kontrolowane poprzez systemd. Proces może być
uruchomiony lub zakończony za pomocą tego narzędzia. Można również za
jego pomocą wyświetlić wszystkie włączone i wyłączone usługi wraz z
informacjami o nich.
Listowanie usług za pomocą
systemctl
Najprostszym sposobem na wylistowanie usług w Linuksie, gdy system
wykorzystuje systemd, jest użycie polecenia
systemctl, po którym następuje komenda
list-units. Można dodać opcję --type=service w
celu ograniczenia wyników tylko do usług.
systemctl list-units --type=serviceAby wyświetlić listę wszystkich usług, zarówno aktywnych jak i
nieaktywnych, należy użyć polecenia systemctl list-units, a
następnie opcji --all:
systemctl list-units --type=service --allUruchamianie usług
systemctl start [service_name]Zatrzymywanie usług
systemctl stop [service_name]Włączenie uruchamiania usługi podczas startu systemu
systemctl enable [service_name]Wyłączenie uruchamiania usługi podczas startu systemu
systemctl disable [service_name]Sprawdzanie statusu usługi
systemctl status [service_name]Przeglądanie logów produkowanych przez usługi
Logi produkowane przez różne usługi są zapisywane przez
systemd poprzez daemona journald. Aby zobaczyć
logi, które zebrał daemon journald, użyj polecenia
journalctl.
Kiedy komenda jest użyta samodzielnie, każdy wpis w dzienniku będzie wyświetlony w pagerze (zazwyczaj mniejszym) do przeglądania. Najstarsze wpisy będą na górze:
journalctlPrawdopodobnie w dzienniku znajduje się spora liczba komunikatów (dziesiątki lub setki tysięcy linii). To pokazuje jak wiele logów znajduje się w bazie.
Wyświetlanie logów z bieżącego startu
Dodanie flagi -b do journalctl spowoduje
filtrowanie logów, pokazując tylko dane zalogowane od ostatniego
restartu systemu:
journalctl -bPrzeglądanie logów produkowanych przez konkretną usługę
journalctl -u [nazwa_usługi]Tworzenie własnych usług w Linuksie
Czasami chcemy, żeby napisana aplikacja była kontrolowana przez
systemd. W niektórych przypadkach warto, aby skrypt był
uruchamiany ponownie, gdy zostanie zabity z jakiegoś powodu. W takich
przypadkach systemd jest dobrym rozwiązaniem.
Utwórz plik o nazwie
[nazwa_usługi].servicew/etc/systemd/systemużywając następującego szablonu:[Unit] Description=Opis uslugi [Service] User=nazwa_uzytkownika (np. root) ExecStart=bezwzgledna_sciezka_do_skryptu (np. /home/student/Desktop/script.sh) Restart=always [Install] WantedBy=multi-user.targetDla projektów języka Python, które wykorzystują środowisko wirtualne:
[Unit] Description=Opis uslugi [Service] User=nazwa_uzytkownika (np. root) ExecStart=/home/user/virtualenv/bin/python main.py Restart=always # zastąp /home/user/virtualenv/bin/python swoim virtualenv i main.py swoim skryptem [Install] WantedBy=multi-user.targetNadaj prawa do wykonywania skryptu poleceniem
chmod +x nazwa_skryptuPrzeładuj pliki usług, aby uwzględnić nową usługę:
sudo systemctl daemon-reloadUruchom swoją usługę:
sudo systemctl start your-service.service
Przykładowy serwis i skrypt:
my_service.service:
[Unit]
Description=Opis uslugi
[Service]
User=jakub
ExecStart=/usr/bin/python3 /home/jakub/Desktop/print_messages.py
Restart=always
[Install]
WantedBy=multi-user.target
print_messages.py:
#!/usr/bin/env python3
import time
if __name__ == '__main__':
while True:
print('Hello world')
time.sleep(1)lub dla basha:
#!/bin/bash
while $(sleep 1);
do
echo "hello world"
doneTworząc własny skrypt, upewnij się, że umieściłeś w nim shebang line (pierwszą linijkę w powyższych przykładach).
🛠🔥 Zadanie 1 🛠🔥
Utwórz skrypt w Pythonie o nazwie print_messages.py.
Zawartość pliku została przedstawiona w poprzedniej części instrukcji.
Uruchom skrypt z poziomu terminala z dwóch różnych lokalizacji:
- lokalizacji, w której znajduje się utworzony skrypt,
- z lokalizacji
/etc/systemd/system
🛠🔥 Zadanie 2 🛠🔥
Utwórz usługę my_service.service. Zawartość pliku
została przedstawiona w poprzedniej części instrukcji. Zrealizuj
uruchomienie usługi.
🛠🔥 Zadanie 3 🛠🔥
Napisz aplikację w języku Python, która korzysta z biblioteki click. CLI
(command line interface) aplikacji powinien przyjąć ścieżkę do jakiegoś
pliku i czas w sekundach (tutaj nazwijmy go n). Aplikacja
powinna zapisywać losową liczbę wraz z aktualnym czasem do podanego
pliku co n sekund.
Napisz plik usługi, który będzie uruchamiał Twoją aplikację. Spróbuj
dodać kilka instrukcji print w swoim kodzie, abyś mógł
sprawdzić czy logi są zbierane poprawnie. Włącz (enable) i uruchom
(start) swoją nową usługę. Sprawdź status i logi. Spróbuj zrestartować
swój system. Usługa powinna uruchomić się automatycznie.
Możesz chcieć stworzyć wirtualne
środowisko (venv) i zainstalować w nim bibliotekę
click.
Zakończ zadanie zatrzymując i wyłączając usługę. Usuń plik
usługi z /etc/systemd/system. Zapisz swój kod, ponieważ
wykorzystasz go na kolejnych zajęciach.